class Resoconti::SegnalazioniDifferenziataController < DefaultController
  require_role self.parent_name.underscore

  active_scaffold :segnalazione_differenziata do |config|
    config.label = Application.controller_label(self)
    list.sorting = {:data => 'DESC'}
    config.actions.add :field_search, :export
    columns = [ :data, :civico_differenziata, :tipi_materiale_differenziata, :tipo_segnalazione, :testo, :personale ]
    config.columns = columns + [:risolto]
    config.columns[:personale].label = "Segnalato da"
    config.columns[:civico_differenziata].label = "Civico"
    config.columns[:tipi_materiale_differenziata].label = "Materiale"
    config.columns[:tipo_segnalazione].options = {:options => SegnalazioneDifferenziata::TIPO_SEGNALAZIONE.map(&:to_sym)}
    [:personale, :tipo_segnalazione, :tipi_materiale_differenziata].each { |i| config.columns[i].form_ui = :select }
    [:tipi_materiale_differenziata].each { |i| config.columns[i].search_ui = :multi_select }
    config.columns[:risolto].form_ui = :checkbox
    config.columns[:civico_differenziata].form_ui = :record_select
    config.columns[:testo].options = NOTE_TEXTAREA
    columns.each { |i| config.columns[i].inplace_edit = :ajax }
    config.action_links.add "Allegati", :action => 'nested', :parameters => {:associations => :allegati}, :type => :member
    #config.action_links.add :do_invia_segnalazioni, :label => "(invia segnalazioni)", :type => :collection, :inline => false
  end
  
  def genera_testo_segnalazioni(segnalazioni, tipo)
    separatore = "------------------------------------------------------------\n"
    testo_segnalazioni = separatore
    #columns = [ :data, :civico_differenziata, :tipi_materiale_differenziata, :tipo_segnalazione, :testo, :personale ]
    if segnalazioni != []
      segnalazioni.each { |s|
        testo_segnalazioni += "Data:\t#{s.data}\n"
        testo_segnalazioni += "Civico/Zona:\t#{s.civico_differenziata.to_label}\n" unless s.civico_differenziata.nil?
        testo_segnalazioni += "Tipo Materiale:\t"
        s.tipi_materiale_differenziata.each { |t| testo_segnalazioni += "#{t.to_label},"} unless s.tipi_materiale_differenziata.nil?
        testo_segnalazioni += "\n"
        testo_segnalazioni += "Tipo Segnalazione:\t#{s.tipo_segnalazione}\n"
        testo_segnalazioni += "Testo:\t#{s.testo}\n"
        testo_segnalazioni += "Segnalato da:\t#{s.personale.to_label}\n" unless s.personale.nil?
        testo_segnalazioni += "Risolto:\t#{s.risolto}\n" unless s.personale.nil?
        testo_segnalazioni += separatore
      }
    else
      testo_segnalazioni += "Nulla da segnalare\n"
      testo_segnalazioni += separatore
    end
    return testo_segnalazioni
  end

  def invia_segnalazioni
    @segnalazioni_pap_recenti = SegnalazioneDifferenziata.all(
      :conditions => ['(risolto = 0 OR data > ?) AND tipo_segnalazione != ?', 3.day.ago.to_date,'spazzamento'],
      :order => 'data DESC'
    )
    @dati_segnalazioni_pap_recenti = genera_testo_segnalazioni(@segnalazioni_pap_recenti, "PORTA A PORTA")
    
    @segnalazioni_spazzamento_recenti = SegnalazioneDifferenziata.all(
      :conditions => ['(risolto = 0 OR data > ?) AND tipo_segnalazione = ?', 3.day.ago.to_date,'spazzamento'],
      :order => 'data DESC'
    )
    @dati_segnalazioni_spazzamento_recenti = genera_testo_segnalazioni(@segnalazioni_spazzamento_recenti, "SPAZZAMENTO")
  end

  def do_invia_segnalazioni_pap_recenti
    invia_segnalazioni
    do_invia_segnalazioni(@segnalazioni_pap_recenti, "PORTA A PORTA",APP_CONFIG[:destinatari_segnalazioni_pap])
  end
  
  def do_invia_segnalazioni_spazzamento_recenti
    invia_segnalazioni
    do_invia_segnalazioni(@segnalazioni_spazzamento_recenti, "SPAZZAMENTO", APP_CONFIG[:destinatari_segnalazioni_spazzamento])
  end
  

  
  def do_invia_segnalazioni(segnalazioni,tipo,destinatari)
    Emailer.deliver_segnalazioni_differenziata(
      destinatari + ", #{current_user.email}",
      "Segnalazioni #{tipo} del #{Date.today}",
      genera_testo_segnalazioni(segnalazioni,tipo)
    )
    redirect_to :action => :index
    flash[:info] = "Mail inviata."
  end
  
  def da_risolvere
    params[:filter] = 'da_risolvere'
    active_scaffold_config.label = Application.controller_label(self) + " (da risolvere)"
    index
  end

  def pap_recenti
    params[:filter] = 'pap_recenti'
    active_scaffold_config.label = "Segnalazioni PORTA A PORTA (recenti)"
    index
  end

  def spazzamento_recenti
    params[:filter] = 'spazzamento_recenti'
    active_scaffold_config.label = "Segnalazioni SPAZZAMENTO (recenti)"
    index
  end

  protected

  def set_conditions
    case params[:filter]
    when 'da_risolvere'
      ['risolto = 0']
    when 'pap_recenti'
      ['(risolto = 0 OR data > ?) AND tipo_segnalazione != ?', 3.day.ago.to_date,'spazzamento']
    when 'spazzamento_recenti'
      ['(risolto = 0 OR data > ?) AND tipo_segnalazione = ?', 3.day.ago.to_date,'spazzamento']
    else
      []
    end
  end
  
  def conditions_for_collection
    set_conditions
  end

  def record_select_conditions_from_controller
    set_conditions
  end 
end
